
package Type_1_arr.title2_P27;

import java.util.Arrays;

//p27移除元素 双指针
public class P27RemoveElement2 {


    /*双指针法（快慢指针法）： 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。

        快指针：寻找新数组的元素 ，新数组就是不含有目标元素的数组
        慢指针：指向更新 新数组下标的位置
    */
    //TODO {0, 1, 2, 2, 3, 0, 4, 2, 8}
    public static int removeElement(int[] nums, int val) {
        System.out.println("开始的元素:" + Arrays.toString(nums));

        int arrLength = nums.length;

        int slowIndex = 0;

        for (int fastIndex = 0; fastIndex < arrLength; fastIndex++) {
            if (nums[fastIndex] != val) {  //未匹配上
                nums[slowIndex] = nums[fastIndex];  //TODO 复制到慢指针位置,无需移动元素
                slowIndex++;    // 慢指针前移
            }
        }

        System.out.println("结束的元素:" + Arrays.toString(nums));
        return slowIndex;
    }

    public static void main(String[] args) {
        int[] nums = {0, 1, 2, 2, 3, 0, 4, 2, 8};
        int num = removeElement(nums, 2);
        System.out.println("剩余的数量" + num);
    }
}